from twisted.internet import pollreactor
pollreactor.install()

from twisted.application import internet, service
from twisted.internet.protocol import ServerFactory, ClientFactory, Factory,  Protocol
from twisted.protocols import basicfrom twisted.internet import pollreactor
pollreactor.install()
from twisted.application import internet, service
from twisted.internet.protocol import ServerFactory, ClientFactory, Factory,  Protocol
from twisted.protocols import basic

####################################################################################################
#843
class PolicyProtocol(Protocol):
    def __init__(self):
        pass
    def connectionMade(self):
        pass
    def dataReceived(self, data):
        if data.find("<policy-file-request/>") != -1:
            self.transport.write("<cross-domain-policy><site-control permitted-cross-domain-policies='all'/><allow-access-from domain='*' to-ports='*'/></cross-domain-policy>")
            self.transport.loseConnection()
        else:
            self.transport.loseConnection()
            
class PolicyFactory(ServerFactory):
    protocol = PolicyProtocol
    def __init__(self, service):
        self.service = service
    
####################################################################################################

####################################################################################################
#front
class FrontServerProtocol(Protocol):
    def __init__(self):
        pass
    def connectionMade(self):
        pass
    def dataReceived(self, data):
        pass
    
class FrontServerFactory(ServerFactory):
    protocol = FrontServerProtocol
    def __init__(self, service):
        self.service = service
####################################################################################################

####################################################################################################
#inside
class InsideServerProtocol(Protocol):
    def __init__(self):
        pass
    def connectionMade(self):
        pass
    def dataReceived(self, data):
        pass
    
class InsideServerFactory(ServerFactory):
    protocol = InsideServerProtocol
    def __init__(self, service):
        self.service = service
####################################################################################################

####################################################################################################
class GateService(service.Service):
    def __init__(self, parentService):
        self.parentService = parentService
    def startService(self):
        service.Service.startService(self)
        
        print "Start Gate Server..."
        
        policyFactory = PolicyFactory(self)
        policyService = internet.TCPServer(843, policyFactory)
        policyService.setServiceParent(self.parentService)
        
        frontFactory = FrontServerFactory(self)
        frontService = internet.TCPServer(80, frontFactory)
        frontService.setServiceParent(self.parentService)
        
        insideFactory = InsideServerFactory(self)
        insideService = internet.TCPServer(16700, insideFactory)
        insideService.setServiceParent(self.parentService)
####################################################################################################

TopService = service.MultiService()

gateService = GateService(TopService)
gateService.setServiceParent(TopService)

application = service.Application('GateServer')

TopService.setServiceParent(service.IServiceCollection(application))